from django import forms # 导入forms模块，用于创建表单类
from django.shortcuts import render
from django.http import JsonResponse # 返回json数据，ajax请求使用
from StuApp.models import GradeInfo, ClassInfo, StudentInfo # 导入年级、班级、学生数据库表模型


class GradeForm(forms.ModelForm):
    """
    年级表单类，用于创建和编辑年级信息
    """
    class_count = forms.IntegerField(label='班级数', required=False) # 班级数，不需要用户输入
    student_count = forms.IntegerField(label='学生数', required=False) # 学生数，不需要用户输入

    class Meta:
        model = GradeInfo
        fields = ['grade_id', 'grade_year']
        widgets = {
            'grade_id': forms.Select(choices=GradeInfo.grade_choices),
            'grade_year': forms.TextInput(attrs={'class': 'form-control'})
        }


# 年级列表
def gradeList(request):
    # 获取年级列表
    grades = GradeInfo.objects.all().order_by('grade_id')
    
    # 为每个年级获取班级数和学生数
    grade_stats = []
    for grade in grades:
        class_count = ClassInfo.objects.filter(grade_id=grade).count()
        student_count = StudentInfo.objects.filter(student_class__grade_id=grade).count()
        grade_stats.append({
            'grade': grade,
            'class_count': class_count,
            'student_count': student_count
        })

    return render(request, 'grade_info.html', {
        'grade_stats': grade_stats
    })


# 修改年级届次
def updateGradeYear(request):
    if request.method == 'POST':
        grade_id = request.POST.get('grade_id') # 获取年级id
        grade_year = request.POST.get('grade_year') # 获取年级届次
        
        try:
            grade = GradeInfo.objects.get(grade_id=grade_id) # 获取年级对象
            grade.grade_year = grade_year # 修改年级届次
            grade.save() # 保存年级对象
            
            # 返回成功信息
            return JsonResponse({
                'status': 'success',
                'message': '年级届次修改成功'
            })
        except GradeInfo.DoesNotExist:
            # 返回年级不存在信息
            return JsonResponse({
                'status': 'error',
                'message': '年级不存在'
            }, status=404)
        except Exception as e:
            # 返回错误信息
            return JsonResponse({
                'status': 'error',
                'message': str(e)
            }, status=500)
    
    return JsonResponse({
        'status': 'error',
        'message': '无效的请求方法'
    }, status=400)
